package cn.xiaolang.spring.demo;

import java.lang.reflect.Field;
import java.util.Arrays;

import org.junit.Test;

/**
 * 包装类的特性
 * 
 * @since JDK1.8
 * @author DeanKano
 * @date 2016年12月10日 下午12:34:53
 */
public class PacketCharacters {

	static {

		try {
			/**
			 * 如果你查看Integer.java类，你会找到IntegerCache.java这个内部私有类，它为-128到127之间的所有整数对象提供缓存。
			 */
			Class<?> cache = Integer.class.getDeclaredClasses()[0]; // 1
			Field myCache = cache.getDeclaredField("cache"); // 2
			myCache.setAccessible(true);// 3

			Integer[] newCache = (Integer[]) myCache.get(cache); // 4
			System.err.println("反射Integer缓存的数组：" + Arrays.toString(newCache));
			System.err.println("【132】角标对应Integer缓存的值是：" + newCache[132]);
			System.err.println("【133】角标对应Integer缓存的值是：" + newCache[133]);

			/** 修改缓存中的值，计算结果直接从缓存中去取 */
			newCache[132] = newCache[133];
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (NoSuchFieldException e) {
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
		int a = 2;
		int b = a + a;
		System.out.printf("%d + %d = %d", a, a, b); //
	}

	@Test
	public void test() {
		Integer a = 1000, b = 1000; 
		System.out.println(a == b);//1 false 两个对象
		Integer c = 100, d = 100; 
		System.out.println(c == d);//2 true
	}
}
